const fp = require('lodash/fp');
//数据 //horsepower 马力 //dollar_value //in_stock
const cars = [{
        name: 'Ferrari FF',
        horsepower: 660,
        dollar_value: 700000,
        in_stock: true
    },
    {
        name: 'Spyker C12 Zagato',
        horsepower: 650,
        dollar_value: 648000,
        in_stock: false
    },
    {
        name: 'Jaguar XKR - S',
        horsepower: 550,
        dollar_value: 132000,
        in_stock: false
    }, {
        name: 'Audi R8',
        horsepower: 525,
        dollar_value: 114200,
        in_stock: false
    }, {
        name: 'Aston Martin One— 77',
        horsepower: 750,
        dollar_value: 1850000,
        in_stock: true
    }, {
        name: 'Pagani Huayra',
        horsepower: 700,
        dollar_value: 1300000,
        in_stock: false
    },
];
//练习1 使用函数fp.flowRight() 重新实现下面这个函数

//my answer

let lastInStock = fp.flowRight(fp.prop('in_stock'), fp.last)

console.log(lastInStock(cars)); //result -> false



//练习2  使用fp.flowRight()，fp.prop(),fp.first()获取第一个car的name

//my answer

let first_name = fp.flowRight(fp.prop('name'), fp.first);

console.log(first_name(cars)); //result -> Ferrari FF

//练习3 使用帮助函数_average 重构 averageDollarValue,使用函数组合实现

let _average = function(xs) {
    return fp.reduce(fp.add, 0, xs) / xs.length
};

let averageDollarValue = function(cars) {
        let dollar_values = fp.map(function(car) {
            return car.dollar_value
        }, cars)
        return _average(dollar_values)
    }
    //my answer

let myAverageDollarValue = fp.flowRight(_average, fp.map(fp.prop('dollar_value')));

//练习4 使用flowRight写一个sanitizeNames()的函数，返回一个下划线链接的小写字符串 ，把数组中的name

//转换为这种形式例如 sanitizeNames(['Hello World'])=> ['hello_world']

let _underScore = fp.replace(/\W+/g, "_") //无需改动，并在sanitizeNames中使用它
    //my answer
let sanitizeNames1 = fp.flowRight(_underScore, fp.map(fp.flowRight(fp.toLower, fp.split(" "), fp.prop('name'))));
//my answer
console.log(sanitizeNames1(cars)) //result => ferrari_ff_spyker_c12_zagato_jaguar_xkr_s_audi_r8_aston_martin_one_77_pagani_huayra
let sanitizeNames2 = fp.flowRight(_underScore, fp.map(fp.flowRight(fp.toLower, fp.split(" "))));
console.log(sanitizeNames2(["Hello World"])); //result => hello_world